Spark 3.0

1 特性

2 Spark SQL改进

新的Adaptive Query Execution (AQE)提升了性能和简化了运行时执行计划调优。

(1) 动态Shuffle分区

用户可以设置较大的Shuffle分区数量,AQE在运行时合并相邻的小分区,简化甚至避免分区调优。

(2) 动态转换join策略

在运行时自动将sort-merge join转换为broadcast-hash join,避免因缺乏统计或错误估计规模导致执行不理想的计划。

(3) 动态优化倾斜join

自动检测并拆分倾斜分区,提升性能

3 动态分区修剪

优化编译时未能识别并跳过的分区。对于星型模型尤为常见。在事实表与维度表连接的场景中,通过识别维表过滤出的分区来修剪从事实表中读取的分区。

4 ANSI SQL 兼容

  • 兼容性:使用阳历公历,禁止使用ANSI SQL保留字作为标识符
  • 正确性:数值操作的运行时溢出检查、预定义schema的表插入的编译时强制类型

5 Join提示

用户可设置join提示以帮助编译器做出最佳选择,并新增提示SHUFFLE_MERGE, SHUFFLE_HASH and SHUFFLE_REPLICATE_NL

6 Python API增强

pandas用于单节点数据组织和分析,Koalas用于分布式环境数据分析,移除了作图支持。

PySpark API增强:

  • 使用类型提示的新Pandas API
  • Pandas UDF和API的新类型,详见blog post
  • 更好的异常处理,隐藏JVM栈跟踪信息

7 Hydron项目,流式和扩展性

  • 加速器感知调度

    Hydron用于在Spark上整合深度学习和数据处理。用户可以通过配置使用加速器。

  • 结构化流的新界面

    增加已完成的流式查询作业的聚合信息、流式查询的详细统计信息

  • 可观察的metrics

    是定义在查询上的随机聚合函数。当查询执行完成时,发出数据处理相关的命名事件。

  • 新的catalog plug-in API

    用于访问和操作外部数据源元数据。

    可以直接访问和操作同时实现了data source V2 API和catalog plug-in API的外部数据源的数据和元数据。

8 其他

更多细节详见release notes

blog-introducing-spark-8

参考资料

Introducing Apache Spark 3.0

O’Reilly’s New Learning Spark, 2nd Edition

Adaptive Query Execution

Pandas UDFs and Python Type Hints

Spark 3.0 Preview